package com.raptor.trustworthy.server.proxy;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * AOP切面日志代理类
 *
 * @Author renhuan
 * @Date 2021-04-22 15:08
 **/
@Aspect
@Component
public class WebLogAspect {

  private final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);

//  @Pointcut("execution(public * com.raptor.trustworthy.server.mapper..*.*(..))")//切入点描述 这个是controller包的切入点
//  public void controllerLog(){}//签名，可以理解成这个切入点的一个名称
//修饰词 返回值 类名 方法名 参数
  @Pointcut("execution(public * com.raptor.trustworthy.server.mapper..*.*(..))")
//切入点描述 这个是controller包的切入点
  public void mapperLog() {
  }


  @Before("mapperLog()") //在切入点的方法run之前要干的
  public void logBeforeMpper(JoinPoint joinPoint) {

    // 记录下请求内容

    logger.info("进入mapper方法CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "."
        + joinPoint.getSignature().getName());
    StringBuffer sb = new StringBuffer();
    Arrays.stream(joinPoint.getArgs()).forEach(jion -> {
      sb.append("入参：" + jion);
    });
    logger.info("进入mapper方法CLASS_METHOD : " + sb.toString());
    //logger.info("################TARGET: " + joinPoint.getTarget());//返回的是需要加强的目标类的对象
    //logger.info("################THIS: " + joinPoint.getThis());//返回的是经过加强后的代理类的对象

  }
}
